home *** CD-ROM | disk | FTP | other *** search
- VARPTRS:
- dc.l 0
- dc.l 0
- dc.w 0
- dc.l 0
-
- START:
-
- lea VARPTRS(pc),a6
- move.l (a6),a0
- move.l 4(a6),a1
- move.w 8(a6),d7 ; num points
- move.l 10(a6),a4
-
- move.w d7,d6
- sub.w #2,d6
-
- OUTERLOP:
- lea.l 12(a0),a2
- lea.l 12(a1),a3
-
- move.w d6,d7
-
- INNERLOP:
- move.l a4,d3
-
- move.l (a2),d0
- sub.l (a0),d0
-
- cmp.l d0,d3
- blt.s outrange
- neg.l d3
- cmp.l d0,d3
- bgt.s outrange
- neg.l d3
-
- move.l 4(a2),d1
- sub.l 4(a0),d1
-
- cmp.l d1,d3
- blt.s outrange
- neg.l d3
- cmp.l d1,d3
- bgt.s outrange
- neg.l d3
-
- move.l 8(a2),d2
- sub.l 8(a0),d2
-
- cmp.l d2,d3
- blt.s outrange
- neg.l d3
- cmp.l d2,d3
- bgt.s outrange
- neg.l d3
-
- move.l d0,d3
- move.l d1,d4
- move.l d2,d5
-
- muls d0,d0
- muls d1,d1
- muls d2,d2
- add.l d0,d1
- add.l d1,d2
-
- bsr CALCSQROOT
- move.l a4,d0
- cmp.l d0,d2
- bgt outrange
-
- sub.l d2,d0 ; md-d
- add.l d2,d2
- muls d0,d3
- divs d2,d3
- ext.l d3
- sub.l d3,(a1)
- add.l d3,(a3)
-
- muls d0,d4
- divs d2,d4
- ext.l d4
- sub.l d4,4(a1)
- add.l d4,4(a3)
-
- muls d0,d5
- divs d2,d5
- ext.l d5
- sub.l d5,8(a1)
- add.l d5,8(a3)
-
- outrange:
-
- adda.w #12,a2
- adda.w #12,a3
-
- dbra d7,INNERLOP
-
- adda.w #12,a0
- adda.w #12,a1
-
- dbra d6,OUTERLOP
-
- move.w 8(a6),d7
- move.l (a6),a0
- move.l 4(a6),a1
-
- subq #1,d7
-
- MOVEANDNORM:
-
- move.l (a1),d0
- add.l (a0),d0
- move.l 4(a1),d1
- add.l 4(a0),d1
- move.l 8(a1),d2
- add.l 8(a0),d2
-
- move.l d0,d3
- move.l d1,d4
- move.l d2,d5
-
- muls d0,d0
- muls d1,d1
- muls d2,d2
- add.l d0,d1
- add.l d1,d2
- bsr CALCSQROOT
-
- muls #10000,d3
- muls #10000,d4
- muls #10000,d5
- divs d2,d3
- divs d2,d4
- divs d2,d5
-
- ext.l d3
- ext.l d4
- ext.l d5
-
- move.l d3,(a0)+
- move.l d4,(a0)+
- move.l d5,(a0)+
-
- REPT 3
- move.l (a1),d0
- muls #240,d0
- asr.l #8,d0
- move.l d0,(a1)+
- endr
-
-
- dbra d7,MOVEANDNORM
-
-
- rts
-
- CALCSQROOT:
-
- tst.l d2
- beq .oksqr
-
- movem.l d0/d1/d3-d7/a0-a6,-(a7)
-
- move.w #31,d0
- .findhigh
- btst d0,d2
- bne .foundhigh
- dbra d0,.findhigh
- .foundhigh
- asr.w #1,d0
- clr.l d3
- bset d0,d3
- move.l d3,d0
-
- move.w d0,d1
- muls d1,d1 ; x*x
- sub.l d2,d1 ; x*x-a
- asr.l #1,d1 ; (x*x-a)/2
- divs d0,d1 ; (x*x-a)/2x
- sub.w d1,d0 ; second approx
- bgt .stillnot0
- move.w #1,d0
- .stillnot0
-
- move.w d0,d1
- muls d1,d1
- sub.l d2,d1
- asr.l #1,d1
- divs d0,d1
- sub.w d1,d0 ; second approx
- bgt .stillnot02
- move.w #1,d0
- .stillnot02
-
- move.w d0,d1
- muls d1,d1
- sub.l d2,d1
- asr.l #1,d1
- divs d0,d1
- sub.w d1,d0 ; second approx
- bgt .stillnot03
- move.w #1,d0
- .stillnot03
-
- move.w d0,d2
- ext.l d2
-
- movem.l (a7)+,d0/d1/d3-d7/a0-a6
-
- .oksqr
- rts
-
-